#-*- coding: utf-8 -*-
"""
@author: Bruno Figueira 11234
@author: Luis Pereira 12784
@last updated: 25-11-2014
@obs: Modulo que define a estrutura da tabela na Base de Dados
"""

from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


class DadosIPCPortugal(Base):
    """
    Define o nome e atributos da tabela. A Base permite automaticamente
    a geracao de uma nova tabela onde os atributos podem ser definidos
    """

    __tablename__ = "Dados_IPC_Portugal"

    ano = Column(Integer, primary_key=True)
    ipc_global = Column(REAL)
    taxa_de_inflacao = Column(REAL)
    remun_min_mensal = Column(REAL)
    remun_max_mensal = Column(REAL)
    pib_anual = Column(REAL)
    rendimento_nacional_bruto_anual = Column(REAL)
    rendimento_disponivel_bruto_anual = Column(REAL)
    remuneracoes_anual = Column(REAL)

    def __init__(self, ano, ipc_global, taxa_de_inflacao, remun_min_mensal,
                 remun_max_mensal, pib_anual, rendimento_nacional_bruto_anual,
                 rendimento_disponivel_bruto_anual, remuneracoes_anual):
        """
        Construtor da classe DadosIPCPortugal

        Keyword Arguments:
        ano -- Valor do ano
        ipc_global -- Valor do ipc_global
        taxa_de_inflacao -- Valor da taxa_de_inflacao
        remun_min_mensal -- Valor da remun_min_mensal
        remun_max_mensal -- Valor da remun_max_mensal
        pib_anual -- Valor do pib_anual
        rendimento_nacional_bruto_anual -- Valor do
        rendimento_nacional_bruto_anual
        rendimento_disponivel_bruto_anual -- Valor do
        rendimento_disponivel_bruto_anual
        remuneracoes_anual -- Valor de remuneracoes_anual
        """
        self.ano = self.__checkEmptyCell(ano)
        self.ipc_global = self.__checkEmptyCell(ipc_global)
        self.taxa_de_inflacao = self.__checkEmptyCell(taxa_de_inflacao)
        self.remun_min_mensal = self.__checkEmptyCell(remun_min_mensal)
        self.remun_max_mensal = self.__checkEmptyCell(remun_max_mensal)
        self.pib_anual = self.__checkEmptyCell(pib_anual)
        self.rendimento_nacional_bruto_anual =\
            self.__checkEmptyCell(rendimento_nacional_bruto_anual)
        self.rendimento_disponivel_bruto_anual =\
            self.__checkEmptyCell(rendimento_disponivel_bruto_anual)
        self.remuneracoes_anual = self.__checkEmptyCell(remuneracoes_anual)

    def __checkEmptyCell(self, cellValue):
        """
        Verifica, para cada cellValue, se esta se encontra vazia.
        Se o cellValue estiver vazio, é retornado o valor 0 para o seu lugar
        
        Keyword Arguments:
        cellValue -- Valor de cada celula
        """
        if not cellValue:
            return 0
        else:
            return cellValue

    def __str__(self):
        """
        Funcao que define como deve ser impresso um objeto da classe
        DadosIPCPortugal
        """
        return "<model.model.DadosIPCPortugal: Ano: " + str(self.ano) + ", " \
        "IPC_Global: " + str(self.ipc_global) + ", " \
        "Taxa de Inflacao: " + str(self.taxa_de_inflacao) + ", " \
        "Remuneracao Minima Mensal: " + str(self.remun_min_mensal) + ", " \
        "Remuneracao Maxima Mensal: " + str(self.remun_max_mensal) + ", " \
        "PIB_Anual: " + str(self.pib_anual) + ", " \
        "Rendimento Nacional Bruto: " +\
               str(self.rendimento_nacional_bruto_anual) + ", " \
        "Rendimento Disponivel Bruto Anual: " +\
               str(self.rendimento_disponivel_bruto_anual) + ", " \
        "Remuneracoes Anuais:" + str(self.remuneracoes_anual) + ">"